﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
///  @brief 音频管理器类，用于控制游戏中的音频播放和静音功能。
/// </summary>
public class AudioManager : MonoBehaviour
{
    /**
     * @brief Ctrl组件的引用，用于访问其他管理器或视图逻辑。
     */
private Ctrl ctrl;

    /**
     * @brief 光标移动音效。
     */
    public AudioClip cursor;
    /**
     * @brief 物品掉落音效。
     */
    public AudioClip drop;
    /**
     * @brief 控制操作音效（如点击按钮）。
     */
    public AudioClip control;
    /**
     * @brief 消除行音效。
     */
    public AudioClip lineClear;

    /**
     * @brief AudioSource组件的引用，用于播放音频。
     */
    private AudioSource audioSource;

    /**
     * @brief 是否静音的标志。
     */
    private bool isMute = false;

    /**
     * @brief Awake方法，在对象被实例化时自动调用。
     *        初始化AudioSource组件和Ctrl组件的引用。
     */
    private void Awake()
    {
        Debug.Log("[AudioManager] Initializing audio manager...");
        audioSource = GetComponent<AudioSource>();
        ctrl = GetComponent<Ctrl>();
        Debug.Log("[AudioManager] Audio manager initialization completed");
    }

    /**
     * @brief 播放光标移动音效。
     */
    public void PlayCursor()
    {
        Debug.Log("[AudioManager] Playing cursor sound");
        PlayAudio(cursor);
    }

    /**
     * @brief 播放物品掉落音效。
     */
    public void PlayDrop()
    {
        Debug.Log("[AudioManager] Playing drop sound");
        PlayAudio(drop);
    }

    /**
     * @brief 播放控制操作音效。
     */
    public void PlayControl()
    {
        Debug.Log("[AudioManager] Playing control sound");
        PlayAudio(control);
    }

    /**
     * @brief 播放消除行音效。
     */
    public void PlayLineClear()
    {
        Debug.Log("[AudioManager] Playing line clear sound");
        PlayAudio(lineClear);
    }


    /**
     * @brief 私有方法，用于播放指定的音效。
     * @param clip 要播放的AudioClip对象。
     */
    private void PlayAudio(AudioClip clip)
    {
        if (isMute) 
        {
            Debug.Log("[AudioManager] Audio is muted, skipping playback");
            return;
        }
        Debug.Log($"[AudioManager] Playing audio clip: {clip.name}");
        audioSource.clip = clip;
        audioSource.Play();
    }

    /**
     * @brief 响应音频按钮点击事件的方法。
     *        切换静音状态，更新视图中的静音按钮显示，并在取消静音时播放光标音效。
     */
    public void OnAudioButtonClick()
    {
        isMute = !isMute;
        Debug.Log($"[AudioManager] Audio mute toggled: {isMute}");
        ctrl.view.SetMuteActive(isMute);
        if (isMute == false)
        {
            Debug.Log("[AudioManager] Audio unmuted, playing cursor sound");
            PlayCursor();
        }
    }
}